package com.ruoyi.statisticalCenter.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.domain.vo.InitTableVo;
import com.ruoyi.common.domain.vo.TableVo;
import com.ruoyi.common.service.TableService;
import com.ruoyi.logistic.domain.PageInfo;
import com.ruoyi.statisticalCenter.domain.ScEnterPaiGrossProfitSheet;
import com.ruoyi.statisticalCenter.domain.vo.ScEnterPaiGrossProfitSheetVo;
import com.ruoyi.statisticalCenter.mapper.ScEnterPaiGrossProfitSheetMapper;
import com.ruoyi.statisticalCenter.service.ScEnterPaiGrossProfitSheetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
@Service
public class ScEnterPaiGrossProfitSheetServiceImpl implements ScEnterPaiGrossProfitSheetService {
    @Autowired
    private ScEnterPaiGrossProfitSheetMapper scEnterPaiGrossProfitSheetMapper;
    @Autowired
    private TableService tableService;
    @Override
    public R collect(ScEnterPaiGrossProfitSheetVo vo) {
        PageHelper.startPage(vo.getPageDate());
        List<ScEnterPaiGrossProfitSheet> collect = scEnterPaiGrossProfitSheetMapper.collect(vo);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("list", PageInfo.info(collect));
        jsonObject.put("fields", getTableVo());

        if (collect == null || collect.size() == 0) {
            return R.ok("暂无数据");
        } else {
            return R.ok(jsonObject);
        }
    }

    public List<TableVo> getTableVo() {
        List<TableVo> first = new ArrayList<>();
        TableVo firstTableVo = new TableVo();firstTableVo.setFields("name");firstTableVo.setTranslate("承包区名称");first.add(firstTableVo);
        firstTableVo = new TableVo();firstTableVo.setFields("actualHqAmount");firstTableVo.setTranslate("实收总部金额");first.add(firstTableVo);

        List<TableVo> second = new ArrayList<>();
        TableVo secondTableVo = new TableVo();secondTableVo.setFields("basePaiFee");secondTableVo.setTranslate("基础派费付费");
        List<TableVo> third = new ArrayList<>();
        String[] basePaiFee = {"basePaiFeeAmount", "basePaiFeeNum", "basePaiFeePrice"};
        InitTableVo initTableVo = new InitTableVo();
        initTableVo.setFields(basePaiFee);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);
        firstTableVo.setSunList(second);
//        first.add(firstTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("policyReciprocity");secondTableVo.setTranslate("政策互惠");
        third = new ArrayList<>();
        String[] policyReciprocity = {"policyReciprocityAmount", "policyReciprocityNum", "policyReciprocityPrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(policyReciprocity);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("wrongSign");secondTableVo.setTranslate("错签");
        third = new ArrayList<>();
        String[] wrongSign = {"wrongSignAmount", "wrongSignNum", "wrongSignPrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(wrongSign);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("repairSign");secondTableVo.setTranslate("补签");
        third = new ArrayList<>();
        String[] repairSign = {"repairSignAmount", "repairSignNum", "repairSignPrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(repairSign);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("subsidyPaiFeePay");secondTableVo.setTranslate("补贴派费");
        third = new ArrayList<>();
        String[] subsidyPaiFeePay = {"subsidyPaiFeePayAmount", "subsidyPaiFeePayNum", "subsidyPaiFeePayPrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(subsidyPaiFeePay);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("entryOperate");secondTableVo.setTranslate("进港操作费");
        third = new ArrayList<>();
        String[] entryOperate = {"entryOperateFeeAmount", "entryOperateFeeNum", "entryOperateFeePrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(entryOperate);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("specialPay");secondTableVo.setTranslate("特价业务付费");
        third = new ArrayList<>();
        String[] specialPay = {"entryOperateFeeAmount", "entryOperateFeeNum", "entryOperateFeePrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(specialPay);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("periodicPayment");secondTableVo.setTranslate("周期性派费付费");
        third = new ArrayList<>();
        String[] periodicPayment = {"periodicPaymentAmount", "periodicPaymentNum", "periodicPaymentPrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(periodicPayment);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("examinePaiFee");secondTableVo.setTranslate("考核派费");
        third = new ArrayList<>();
        String[] examinePaiFee = {"examinePaiFeeAmount", "examinePaiFeeNum", "examinePaiFeePrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(examinePaiFee);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("starPlanPay");secondTableVo.setTranslate("星计划收费");
        third = new ArrayList<>();
        String[] starPlanPay = {"starPlanPayAmount", "starPlanPayNum", "starPlanPayPrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(starPlanPay);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("bulkPaiFeePayment");secondTableVo.setTranslate("大货派费付费");
        third = new ArrayList<>();
        String[] bulkPaiFeePayment = {"bulkPaiFeePaymentAmount", "bulkPaiFeePaymentNum", "bulkPaiFeePaymentPrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(bulkPaiFeePayment);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("townshipSubsidyPayment");secondTableVo.setTranslate("乡镇村业务费用");
        third = new ArrayList<>();
        String[] townshipSubsidyPayment = {"townshipSubsidyPaymentAmount", "townshipSubsidyPaymentNum", "townshipSubsidyPaymentPrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(townshipSubsidyPayment);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("asNeedDeliveryPayment");secondTableVo.setTranslate("按需派送业务费用");
        third = new ArrayList<>();
        String[] asNeedDeliveryPayment = {"asNeedDeliveryPaymentAmount", "asNeedDeliveryPaymentNum", "asNeedDeliveryPaymentPrice"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(asNeedDeliveryPayment);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("totalDeliveryCount");secondTableVo.setTranslate("总派件数");
        secondTableVo = new TableVo();secondTableVo.setFields("totalSubsidyAmount");secondTableVo.setTranslate("补贴合计");
        secondTableVo = new TableVo();secondTableVo.setFields("perParcelSubsidy");secondTableVo.setTranslate("单票补贴");
        secondTableVo = new TableVo();secondTableVo.setFields("totalDispatchFee");secondTableVo.setTranslate("合计派费");
        secondTableVo = new TableVo();secondTableVo.setFields("perParcelDispatchFee");secondTableVo.setTranslate("单票派费");
        initTableVo = new InitTableVo();
        initTableVo.setCode("scEnterPai");
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("marineProjectPayment");secondTableVo.setTranslate("航海扣款");
        third = new ArrayList<>();
        String[] marineProjectPayment = {"marineProjectPaymentAmount", "marineProjectPerParcelDeduction"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(marineProjectPayment);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("netPerParcelIncome");secondTableVo.setTranslate("单票到手派费");
        secondTableVo = new TableVo();secondTableVo.setFields("deliveryIncome");secondTableVo.setTranslate("派件收入");
        initTableVo = new InitTableVo();
        initTableVo.setCode("scEnterPai");
        second.add(secondTableVo);

        firstTableVo = new TableVo();firstTableVo.setFields("shouldPay");firstTableVo.setTranslate("应付承包区金额");first.add(firstTableVo);
        second = new ArrayList<>();
        secondTableVo = new TableVo();secondTableVo.setFields("totalPaiCount");secondTableVo.setTranslate("总派件数");second.add(secondTableVo);
        secondTableVo = new TableVo();secondTableVo.setFields("baseDispatchFee");secondTableVo.setTranslate("基础派费");second.add(secondTableVo);
        secondTableVo = new TableVo();secondTableVo.setFields("specialDiscountSubsidyFee");secondTableVo.setTranslate("特价派费");second.add(secondTableVo);
        secondTableVo = new TableVo();secondTableVo.setFields("bonusDispatchFee");secondTableVo.setTranslate("补贴派费");second.add(secondTableVo);
        secondTableVo = new TableVo();secondTableVo.setFields("assessmentDispatchFee");secondTableVo.setTranslate("考核派费");second.add(secondTableVo);
        secondTableVo = new TableVo();secondTableVo.setFields("totalDispatchAmount");secondTableVo.setTranslate("合计派费");second.add(secondTableVo);
        secondTableVo = new TableVo();secondTableVo.setFields("perParcelDispatchAmount");secondTableVo.setTranslate("单票派费");second.add(secondTableVo);
        initTableVo = new InitTableVo();
        initTableVo.setCode("scEnterPai");
        firstTableVo.setSunList(second);
//        first.add(firstTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("marineGeneralPass");secondTableVo.setTranslate("航海通票扣款");
        third = new ArrayList<>();
        String[] marineGeneralPass = {"marineGeneralPassTicketDeduction", "marineSingleParcelDeduction"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(marineGeneralPass);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("policyMutualBenefit");secondTableVo.setTranslate("政策互惠扣款");
        third = new ArrayList<>();
        String[] policyMutualBenefit = {"policyMutualBenefitDeduction", "policyMutualBenefitPerParcelDeduction"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(policyMutualBenefit);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("starPlanDe");secondTableVo.setTranslate("星计划扣款");
        third = new ArrayList<>();
        String[] starPlanDe = {"starPlanDeduction", "starPlanPerParcelDeduction"};
        initTableVo = new InitTableVo();
        initTableVo.setFields(starPlanDe);
        initTableVo.setCode("scEnterPai");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();secondTableVo.setFields("actualPaidDispatchFee");secondTableVo.setTranslate("实际付给承包区派费");second.add(secondTableVo);
        secondTableVo = new TableVo();secondTableVo.setFields("singlePointDispatchFeeAdjustment");secondTableVo.setTranslate("网点派费调整");second.add(secondTableVo);
        secondTableVo = new TableVo();secondTableVo.setFields("actualNetDispatchFee");secondTableVo.setTranslate("实际到手单票派费");second.add(secondTableVo);
        initTableVo = new InitTableVo();
        initTableVo.setCode("scEnterPai");
        firstTableVo.setSunList(second);
//        second.add(secondTableVo);

        firstTableVo = new TableVo();firstTableVo.setFields("enter");firstTableVo.setTranslate("进港派件毛利");
        second = new ArrayList<>();
        secondTableVo = new TableVo();secondTableVo.setFields("remainingDispatchFeePerParcel");secondTableVo.setTranslate("单票结余派费");second.add(secondTableVo);
        secondTableVo = new TableVo();secondTableVo.setFields("dispatchProfitMargin");secondTableVo.setTranslate("派费毛利率");second.add(secondTableVo);
        secondTableVo = new TableVo();secondTableVo.setFields("totalDispatchProfit");secondTableVo.setTranslate("派费毛利合计");second.add(secondTableVo);
        initTableVo = new InitTableVo();
        initTableVo.setCode("scEnterPai");
        second.add(secondTableVo);
        firstTableVo.setSunList(second);
        first.add(firstTableVo);

        return first;
    }
}
